home *** CD-ROM | disk | FTP | other *** search
/ Shareware Extravaganza - Disc 1 / ShareWare Extravaganza 1 of 4 (The Ultimate Shareware Company).iso / grprogs / picutil.exe / STRETCH.ASM < prev    next >
Assembly Source File  |  1986-07-14  |  20KB  |  578 lines

  1. ;╔═════════════════════════════════════════════════════════════════════════════╗
  2. ;║ ░░░░░░░░░░░ PROGRAM = MOVE.ASM ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ║
  3. ;╚═════════════════════════════════════════════════════════════════════════════╝
  4. CSEG           SEGMENT PUBLIC BYTE
  5.            ASSUME  CS:CSEG,DS:CSEG
  6.  
  7. CR           EQU     0DH
  8. LF           EQU     0AH
  9.  
  10. FILENAME       DB      128 DUP (0)
  11. HANDLE_IN      DW      0
  12. HANDLE_OUT     DW      0
  13. TYPE_FROM      DW      0               ;POINTS TO TYPE IN FILENAME
  14. OPTIONS        DB      128 DUP(0)           ;OPTIONS
  15.  
  16. X           DW      0
  17. Y           DW      0
  18. DISK_BUFFER    DD      0               ;DISK BUFFER OFFSET
  19.  
  20. ;44 BYTES
  21. IMG_NAME       DB      '                              '
  22. IMG_HEIGHT     DW      0
  23. IMG_WIDTH      DW      0
  24. IMG_WIDTH_BYTE DW      0
  25. IMG_PIX_SIZE   DW      1
  26. IMG_PIX_FMT    DW      0
  27. IMG_COLOR      DW      0
  28. IMG_COMPRESS   DW      0
  29.  
  30. STR_NAME       DB      '                              '
  31. STR_HEIGHT     DW      0
  32. STR_WIDTH      DW      0
  33. STR_WIDTH_BYTE DW      0
  34. STR_PIX_SIZE   DW      1
  35. STR_PIX_FMT    DW      0
  36. STR_COLOR      DW      0
  37. STR_COMPRESS   DW      0
  38.  
  39. BYTE_ADJUST    DW      0
  40. EIGHT           DW      8
  41.  
  42. IMG           DB      'IMG',0
  43. STR           DB      'STR',0
  44.  
  45. TELL_HOW       DB      '┌─────────────────────────────────────────────────────────────┐',cr,lf
  46.            DB      '│syntax = STRETCH filename.IMG [X#],[Y#]                      │',cr,lf
  47.            DB      '├─────────────────────────────────────────────────────────────┤',cr,lf
  48.            DB      '│filename.typ = name of image file....must have correct type  │',cr,lf
  49.            DB      '├─────────────────────────────────────────────────────────────┤',cr,lf
  50.            DB      '│   X#  = Number of times to expand 1 vertical pixel          │',CR,LF
  51.            DB      '│         X# only presently supports 2,4,8                    │',CR,LF
  52.            DB      '│   Y#  = Number of times to expand 1 horizontal pixel        │',CR,LF
  53.            DB      '└─────────────────────────────────────────────────────────────┘',cr,lf
  54.            DB      7,'$'
  55. OPEN_ERROR     DB      'open error on input file',cr,lf,'$'
  56. CREATE_ERROR   DB      'create error on output file',cr,lf,'$'
  57. TYPE_ERROR     DB      'error in type of input file',cr,lf
  58.            Db      'must be IMG',cr,lf,'$'
  59. NOT_IMP        DB      'NOT IMPLIMENTED YET',CR,LF,'$'
  60. ;╔═════════════════════════════════════════════════════════════════════════════╗
  61. ;║ ░░░░░░░░░░░ MOVE.ASM ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ║
  62. ;╚═════════════════════════════════════════════════════════════════════════════╝
  63. MOVE           PROC    FAR
  64. ;┌─────────────────────────────────────────────────────────────────────────────┐
  65. ;│           RETURN SETUP                               │
  66. ;└─────────────────────────────────────────────────────────────────────────────┘
  67.            CLD
  68.            CLI
  69.            MOV     AX,CS               ;TEMP STACK
  70.            MOV     SS,AX               ;
  71.            MOV     ES,AX               ;
  72.            MOV     SP,OFFSET STACK           ;
  73.            STI
  74.            PUSH    DS               ;
  75.            XOR     AX,AX               ;
  76.            PUSH    AX               ;
  77. ;┌─────────────────────────────────────────────────────────────────────────────┐
  78. ;│           GET FILENAME FROM COMMAND LINE                       │
  79. ;└─────────────────────────────────────────────────────────────────────────────┘
  80.            MOV     SI,82H               ;START OF FILENAME
  81.            XOR     CH,CH               ;
  82.            MOV     CL,DS:[SI-2]           ;SIZE OF FILENAME
  83.            CMP     CX,0               ;NO COMMANDS
  84.            JE      GFN800               ;ERROR
  85.            MOV     DI,OFFSET FILENAME      ;STORE FILENAME HERE
  86. GFN100:
  87.            LODSB                   ;GET CHARACTER
  88.            CMP     AL,20H               ;END OF FILENAME?
  89.            JE      GFN700               ;YES....BRANCH
  90.            CMP     AL,CR               ;END OF COMMAND LINE?
  91.            JE      GFN800               ;YES....ERROR
  92.            STOSB                   ;SAVE CHARACTER
  93.            CMP     AL,'.'                  ;START OF TYPE
  94.            JNE     GFN200               ;
  95.            MOV     CS:TYPE_FROM,DI           ;START OF TYPE
  96. GFN200:
  97.            LOOP    GFN100               ;GET ANOTHER CHARACTER
  98.            JMP     SHORT GFN800           ;ERROR IF DONE ALREADY
  99. GFN300:
  100.            LODSB                   ;GET CHARACTER
  101.            CMP     AL,CR               ;END OF COMMAND LINE?
  102.            JE      GFN900               ;YES....ERROR
  103.            CMP     AL,'a'
  104.            JB      GFN400
  105.            CMP     AL,'z'
  106.            JA      GFN400
  107.            AND     AL,0DFH               ;CONVERT TO UPPER CASE
  108. GFN400:
  109.            STOSB                   ;SAVE CHARACTER
  110.            LOOP    GFN300               ;GET ANOTHER CHARACTER
  111.            JMP     SHORT GFN800           ;ERROR IF DONE
  112. GFN700:                        ;
  113.            MOV     AL,0               ;
  114.            STOSB                   ;
  115.            MOV     DI,OFFSET OPTIONS       ;
  116.            LOOP    GFN300
  117. GFN800:
  118.            MOV     DX,OFFSET TELL_HOW      ;
  119.            JMP     ERROR               ;
  120. GFN900:
  121.            MOV     AL,0               ;PUT NULL AT END OF STRING
  122.            STOSB                   ;
  123.            CMP     WORD PTR CS:TYPE_FROM,0 ;
  124.            JE      GFN800               ;ERROR
  125. ;┌─────────────────────────────────────────────────────────────────────────────┐
  126. ;│           FIND DISK MEMORY                            │
  127. ;└─────────────────────────────────────────────────────────────────────────────┘
  128.            MOV     AX,OFFSET PROG_END      ;
  129.            MOV     BX,CS               ;
  130.            MOV     DS,BX
  131.            SHR     AX,1               ;
  132.            SHR     AX,1               ;
  133.            SHR     AX,1               ;
  134.            SHR     AX,1               ;
  135.            ADD     BX,AX               ;
  136.            INC     BX               ;
  137.            MOV     WORD PTR DISK_BUFFER+2,BX      ;
  138. ;┌─────────────────────────────────────────────────────────────────────────────┐
  139. ;│           CHECK FOR CORRECT FILE TYPE                       │
  140. ;└─────────────────────────────────────────────────────────────────────────────┘
  141.            MOV     SI,OFFSET IMG           ;CHANGE TYPE ON FILENAME
  142.            MOV     DI,TYPE_FROM           ;
  143.            MOV     CX,3               ;
  144.            AND     BYTE PTR [DI],0DFH        ;MAKE CAPITOL LETTER
  145.            AND     BYTE PTR [DI+1],0DFH        ;MAKE CAPITOL LETTER
  146.            AND     BYTE PTR [DI+2],0DFH        ;MAKE CAPITOL LETTER
  147.            REP     CMPSB               ;
  148.            JNE     OIF050
  149. ;┌─────────────────────────────────────────────────────────────────────────────┐
  150. ;│           OPEN INPUT FILE                               │
  151. ;└─────────────────────────────────────────────────────────────────────────────┘
  152.            MOV     AH,3DH               ;OPEN FILE FOR READ/WRITE
  153.            MOV     AL,2H               ;
  154.            MOV     DX,OFFSET FILENAME      ;
  155.            INT     21H               ;
  156.            JNC     OIF100
  157. OIF050:
  158.            MOV     DX,OFFSET OPEN_ERROR    ;
  159.            JMP     ERROR
  160. OIF100:
  161.            MOV     HANDLE_IN,AX
  162. ;┌─────────────────────────────────────────────────────────────────────────────┐
  163. ;│           CHECK FOR OPTIONS                           │
  164. ;└─────────────────────────────────────────────────────────────────────────────┘
  165.            MOV     SI,OFFSET OPTIONS
  166. OPT100:
  167.            LODSB
  168.            CMP     AL,0               ;END OF OPTIONS?
  169.            JE      OPT900               ;YES GO ON
  170.            AND     AL,0DFH
  171.  
  172.            CMP     AL,'X'                  ;UP
  173.            JNE     OPT200
  174.            CALL    GET_NUMBER
  175.            MOV     X,AX
  176.            JMP     SHORT OPT100
  177. OPT200:
  178.            CMP     AL,'Y'                  ;DOWN
  179.            JNE     OPT100
  180.            CALL    GET_NUMBER
  181.            MOV     Y,AX
  182.            JMP     SHORT OPT100
  183. OPT900:
  184. ;┌─────────────────────────────────────────────────────────────────────────────┐
  185. ;│           READ IMG HEADER                               │
  186. ;└─────────────────────────────────────────────────────────────────────────────┘
  187.            MOV     AH,3FH
  188.            MOV     BX,HANDLE_IN
  189.            MOV     CX,44
  190.            MOV     DX,OFFSET IMG_NAME
  191.            INT     21H
  192. ;┌─────────────────────────────────────────────────────────────────────────────┐
  193. ;│           COPY TO STR HEADER                           │
  194. ;└─────────────────────────────────────────────────────────────────────────────┘
  195.            MOV     SI,OFFSET IMG_NAME
  196.            MOV     DI,OFFSET STR_NAME
  197.            MOV     CX,44
  198.            REP     MOVSB
  199. ;┌─────────────────────────────────────────────────────────────────────────────┐
  200. ;│           CALCULATE HEADER PARMS                           │
  201. ;└─────────────────────────────────────────────────────────────────────────────┘
  202.            CMP     X,0
  203.            JE      CH200
  204.            MOV     AX,IMG_WIDTH
  205.            MUL     X
  206.            MOV     STR_WIDTH,AX
  207.            DIV     EIGHT
  208.            CMP     DX,0
  209.            JE      CH100
  210.            INC     AX
  211. CH100:
  212.            MOV     STR_WIDTH_BYTE,AX
  213. CH200:
  214.            CMP     Y,0
  215.            JE      CH300
  216.            MOV     AX,IMG_HEIGHT
  217.            MUL     Y
  218.            MOV     STR_HEIGHT,AX
  219. CH300:
  220. ;┌─────────────────────────────────────────────────────────────────────────────┐
  221. ;│           CHANGE FILENAME                               │
  222. ;└─────────────────────────────────────────────────────────────────────────────┘
  223.            MOV     SI,OFFSET STR           ;CHANGE TYPE ON FILENAME
  224.            MOV     DI,TYPE_FROM           ;
  225.            MOV     CX,3               ;
  226.            REP     MOVSB               ;
  227. ;┌─────────────────────────────────────────────────────────────────────────────┐
  228. ;│           CREATE OUTPUT FILE                           │
  229. ;└─────────────────────────────────────────────────────────────────────────────┘
  230.            MOV     AH,3CH               ;
  231.            MOV     CX,20H               ;
  232.            MOV     DX,OFFSET FILENAME      ;
  233.            INT     21H               ;
  234.            JNC     COF100
  235.            MOV     DX,OFFSET CREATE_ERROR  ;
  236.            JMP     ERROR
  237. COF100:
  238.            MOV     HANDLE_OUT,AX
  239. ;┌─────────────────────────────────────────────────────────────────────────────┐
  240. ;│           WRITE NEW HEADER                            │
  241. ;└─────────────────────────────────────────────────────────────────────────────┘
  242.            MOV     AH,40H
  243.            MOV     BX,HANDLE_OUT
  244.            MOV     CX,44
  245.            MOV     DX,OFFSET STR_NAME
  246.            INT     21H
  247. ;┌─────────────────────────────────────────────────────────────────────────────┐
  248. ;│           TRANSFER FILE                               │
  249. ;└─────────────────────────────────────────────────────────────────────────────┘
  250.            MOV     CX,IMG_HEIGHT
  251. CFA050:
  252.            PUSH    CX
  253.            CALL    READ_LINE
  254.            CMP     X,0
  255.            JE      CFA200
  256. CFA100:
  257.            CALL    EXPAND_X
  258. CFA200:
  259.            MOV     CX,Y
  260.            CMP     CX,0
  261.            JNE     CFA300
  262.            INC     CX
  263. CFA300:
  264.            CALL    WRITE_LINE
  265.            LOOP    CFA300
  266.            POP     CX
  267.            LOOP    CFA050
  268. ;┌─────────────────────────────────────────────────────────────────────────────┐
  269. ;│           CLOSE FILES                               │
  270. ;└─────────────────────────────────────────────────────────────────────────────┘
  271.            MOV     BX,HANDLE_IN           ;CLOSE FILE
  272.            MOV     AH,3EH               ;
  273.            INT     21H               ;
  274.            MOV     BX,HANDLE_OUT           ;CLOSE FILE
  275.            MOV     AH,3EH               ;
  276.            INT     21H               ;
  277.            JMP     EXIT
  278. ERROR:
  279.            MOV     AX,CS
  280.            MOV     DS,AX
  281.            MOV     AH,9
  282.            INT     21H
  283. EXIT:
  284.            RET                   ;
  285. MOVE           ENDP
  286.  
  287. ;╔═════════════════════════════════════════════════════════════════════════════╗
  288. ;║ ░░░░░░░░░░░ GET NUMBER ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ║
  289. ;╚═════════════════════════════════════════════════════════════════════════════╝
  290. ;┌─────────────────────────────────────────────────────────────────────────────┐
  291. ;│           GET NUMBER FOLLOWING COMMAND                       │
  292. ;└─────────────────────────────────────────────────────────────────────────────┘
  293. GET_NUMBER     PROC    NEAR
  294.  
  295.            PUSH    BX
  296.            MOV     BX,0
  297. GN100:
  298.            CMP     BYTE PTR [SI+BX],'0'
  299.            JB      GN200
  300.            CMP     BYTE PTR [SI+BX],'9'
  301.            JA      GN200
  302.            INC     BX
  303.            JMP     SHORT GN100
  304. GN200:
  305.            MOV     AX,BX
  306.            CALL    ASC2BIN
  307.            ADD     SI,BX
  308.            POP     BX
  309.            RET
  310.  
  311. GET_NUMBER     ENDP
  312. ;╔═════════════════════════════════════════════════════════════════════════════╗
  313. ;║ ░░░░░░░░░░░ ASCII TO BINARY ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ║
  314. ;╚═════════════════════════════════════════════════════════════════════════════╝
  315. DIVISOR        DW      0,1
  316. TEN           DW      10,100,1000,10000
  317. ;┌─────────────────────────────────────────────────────────────────────────────┐
  318. ;│        DS:SI = START OF ASCII STRING                       │
  319. ;│           AX = NUMBER OF CHARACTER IN STRING (1-5)                │
  320. ;├─────────────────────────────────────────────────────────────────────────────┤
  321. ;│           AX = RETURNS BINARY NUMBER                       │
  322. ;└─────────────────────────────────────────────────────────────────────────────┘
  323.            PUBLIC  ASC2BIN
  324. ASC2BIN        PROC    NEAR
  325.  
  326.            PUSH    BX               ;SAVE REGISTERS
  327.            PUSH    CX               ;
  328.            PUSH    DX               ;
  329.            PUSH    SI               ;
  330.  
  331.            SHL     AX,1               ;MAKE INTO WORD OFFSET
  332.            MOV     BX,AX               ;
  333.            PUSH    SI               ;
  334.            MOV     SI,OFFSET DIVISOR       ;
  335.            MOV     CX,[SI+BX]           ;DIVISOR
  336.            POP     SI               ;
  337.            XOR     BX,BX               ;CLEAR BINARY HOLD REGISTER
  338.                            ;
  339. ASC100:                        ;
  340.            LODSB                   ;GET ASCII NUMBER
  341.            AND     AL,0FH               ;STRIP ASCII PART
  342.            XOR     AH,AH               ;
  343.            MUL     CX               ;
  344.            ADD     BX,AX               ;
  345.            CMP     CX,1               ;DONE?
  346.            JE      ASC300
  347.            MOV     AX,CX               ;GET DIVISOR
  348.            XOR     DX,DX               ;
  349.            DIV     TEN               ;DIVIDE IT BY TEN
  350.            MOV     CX,AX               ;PUT BACK IN DX
  351.            JMP     SHORT ASC100           ;
  352. ASC300:
  353.            MOV     AX,BX               ;PUT BINARY NUMBER IN AX
  354.            POP     SI               ;RESTORE REGISTERS
  355.            POP     DX               ;
  356.            POP     CX               ;
  357.            POP     BX               ;
  358.            RET
  359. ASC2BIN        ENDP
  360. ;╔═════════════════════════════════════════════════════════════════════════════╗
  361. ;║ ░░░░░░░░░░░ READ_LINE ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ║
  362. ;╚═════════════════════════════════════════════════════════════════════════════╝
  363. READ_LINE      PROC    NEAR
  364.  
  365.            PUSH    BX
  366.            PUSH    CX
  367.            PUSH    DX
  368.            PUSH    DS
  369.            MOV     AH,3FH
  370.            MOV     BX,HANDLE_IN
  371.            MOV     CX,IMG_WIDTH_BYTE
  372.            LDS     DX,DISK_BUFFER
  373.            INT     21H
  374.            POP     DS
  375.            POP     DX
  376.            POP     CX
  377.            POP     BX
  378.            RET
  379.  
  380. READ_LINE      ENDP
  381. ;╔═════════════════════════════════════════════════════════════════════════════╗
  382. ;║ ░░░░░░░░░░░ WRITE_LINE ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ║
  383. ;╚═════════════════════════════════════════════════════════════════════════════╝
  384. WRITE_LINE     PROC    NEAR
  385.  
  386.            PUSH    BX
  387.            PUSH    CX
  388.            PUSH    DX
  389.            PUSH    DS
  390.            MOV     AH,40H
  391.            MOV     BX,HANDLE_OUT
  392.            MOV     CX,STR_WIDTH_BYTE
  393.            LDS     DX,DISK_BUFFER
  394.            INT     21H
  395.            POP     DS
  396.            POP     DX
  397.            POP     CX
  398.            POP     BX
  399.            RET
  400.  
  401. WRITE_LINE     ENDP
  402. ;╔═════════════════════════════════════════════════════════════════════════════╗
  403. ;║ ░░░░░░░░░░░ EXPAND_X     ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ║
  404. ;╚═════════════════════════════════════════════════════════════════════════════╝
  405. X_TABLE:
  406.            DW      0               ;1
  407.            DW      OFFSET X_2           ;2
  408.            DW      0               ;3
  409.            DW      OFFSET X_4           ;4
  410.            DW      0               ;5
  411.            DW      0               ;6
  412.            DW      0               ;7
  413.            DW      OFFSET X_8           ;8
  414. EXPAND_X       PROC    NEAR
  415.  
  416.  
  417.            PUSH    AX
  418.            PUSH    BX
  419.            PUSH    CX
  420.            PUSH    DX
  421.            PUSH    DI
  422.            PUSH    SI
  423.            PUSH    DS
  424.            PUSH    ES
  425. EX100:
  426.            MOV     BX,X
  427.            CMP     BX,8
  428.            JBE     EX200
  429.            JMP     SHORT EX800
  430. EX200:
  431.            SUB     BX,1
  432.            SHL     BX,1
  433.            ADD     BX,OFFSET X_TABLE
  434.            CMP     WORD PTR [BX],0
  435.            JE      EX800
  436.  
  437.            LES     DI,DISK_BUFFER
  438.            LDS     SI,DISK_BUFFER
  439.            ADD     DI,8000H
  440.            XOR     DX,DX
  441.            MOV     CX,CS:IMG_WIDTH_BYTE
  442.            CALL    cs:[BX]
  443.            LES     SI,CS:DISK_BUFFER
  444.            LDS     DI,CS:DISK_BUFFER
  445.            ADD     SI,8000H
  446.            MOV     CX,CS:STR_WIDTH_BYTE
  447.            REP     MOVSB
  448. EX800:
  449.            POP     ES
  450.            POP     DS
  451.            POP     SI
  452.            POP     DI
  453.            POP     DX
  454.            POP     CX
  455.            POP     BX
  456.            POP     AX
  457.  
  458.            RET
  459.  
  460. EXPAND_X       ENDP
  461. ;┌─────────────────────────────────────────────────────────────────────────────┐
  462. ;│           X_2                                   │
  463. ;└─────────────────────────────────────────────────────────────────────────────┘
  464. X2_TABLE       DB      00H,03H,0CH,0FH
  465.            DB      30H,33H,3CH,3FH
  466.            DB      0C0H,0C3H,0CCH,0CFH
  467.            DB      0F0H,0F3H,0FCH,0FFH
  468. X_2           PROC    NEAR
  469.  
  470.            LODSB
  471.            PUSH    DS
  472.            MOV     BX,CS
  473.            MOV     DS,BX
  474.            MOV     BX,OFFSET X2_TABLE
  475.  
  476.            MOV     AH,AL
  477.            SHR     AL,1
  478.            SHR     AL,1
  479.            SHR     AL,1
  480.            SHR     AL,1
  481.            XLAT
  482.            STOSB
  483.            MOV     AL,AH
  484.            AND     AL,0FH
  485.            XLAT
  486.            STOSB
  487.            POP     DS
  488.            LOOP    X_2
  489.            RET
  490.  
  491. X_2           ENDP
  492. ;┌─────────────────────────────────────────────────────────────────────────────┐
  493. ;│           X_4                                   │
  494. ;└─────────────────────────────────────────────────────────────────────────────┘
  495. X4_TABLE       DB      00H,0FH,0F0H,0FFH
  496. X_4           PROC    NEAR
  497.            LODSB
  498.            PUSH    DS
  499.            MOV     BX,CS
  500.            MOV     DS,BX
  501.            MOV     BX,OFFSET X4_TABLE
  502.  
  503.            PUSH    CX
  504.            MOV     CX,4
  505.            MOV     AH,AL
  506. X4_200:
  507.            ROL     AH,1
  508.            ROL     AH,1
  509.            MOV     AL,AH
  510.            AND     AL,3
  511.            XLAT
  512.            STOSB
  513.            LOOP    X4_200
  514.            POP     CX
  515.            POP     DS
  516.            LOOP    X_4
  517.            RET
  518.  
  519. X_4           ENDP
  520. ;┌─────────────────────────────────────────────────────────────────────────────┐
  521. ;│           X_8                                   │
  522. ;└─────────────────────────────────────────────────────────────────────────────┘
  523. X_8           PROC    NEAR
  524.  
  525.            PUSH    BX
  526.            DIV     CS:EIGHT
  527. X8_100:
  528.            PUSH    CX
  529.            MOV     CX,8
  530.            LODSB
  531.            MOV     BL,AL
  532. X8_200:
  533.            RCL     BL,1
  534.            JC      X8_300
  535.            XOR     AL,AL
  536.            JMP     SHORT X8_400
  537. X8_300:
  538.            MOV     AL,0FFH
  539. X8_400:
  540.            STOSB
  541.            LOOP    X8_200
  542.            POP     CX
  543.            LOOP    X8_100
  544.            POP     BX
  545.            RET
  546.  
  547. X_8           ENDP
  548. ;╔═════════════════════════════════════════════════════════════════════════════╗
  549. ;║ ░░░░░░░░░░░ CLEAR BUFFER░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ║
  550. ;╚═════════════════════════════════════════════════════════════════════════════╝
  551. CLEAR_BUFFER   PROC    NEAR
  552.  
  553.            PUSH    AX
  554.            PUSH    CX
  555.            PUSH    DI
  556.            PUSH    ES
  557.  
  558.            XOR     AX,AX
  559.            MOV     CX,IMG_WIDTH_BYTE
  560.            LES     DI,DISK_BUFFER
  561.  
  562.            POP     ES
  563.            POP     DI
  564.            POP     CX
  565.            POP     AX
  566.            RET
  567.  
  568. CLEAR_BUFFER   ENDP
  569. ;╔═════════════════════════════════════════════════════════════════════════════╗
  570. ;╚═════════════════════════════════════════════════════════════════════════════╝
  571.            DB      64 DUP('STACK')
  572. STACK           EQU     $
  573. PROG_END       EQU     $
  574. ;╔═════════════════════════════════════════════════════════════════════════════╗
  575. ;╚═════════════════════════════════════════════════════════════════════════════╝
  576. CSEG           ENDS
  577.            END     MOVE
  578.